import { getAccessToken } from './auth';
import {API_BASE_URL} from "@/config"; // 假设getAccessToken函数移动到auth模块中

// 创建一个请求函数
const request = async (options) => {
    try {
        // 显示加载提示
        uni.showLoading({
            title: '加载中...',
            mask: true
        });

        // 设置默认配置
        const config = {
            url: API_BASE_URL+options.url,
            method: options.method || 'GET',
            header: {
                'Content-Type': 'application/json',
                ...options.headers
            },
            data: options.data || {},
            timeout: options.timeout || 600000
        };

        // 添加 token 到请求头
        if (!options.url.includes('/login')) {
            console.log('请求头添加token');
            config.header.Authorization = `Bearer ${uni.getStorageSync('accessToken')}`;
        }

        // 添加 tenant-id 到请求头
        config.header['tenant-id'] = 1;

        // 发起请求
        const response = await uni.request(config);
		console.log("res",response);

        // 隐藏加载提示
        uni.hideLoading();

		if(response.data.code==401){
			uni.showToast({
			    title: '登录已过期，请重新登录',
			    icon: 'none',
			    duration: 2000
			});
			uni.reLaunch({
			    url: '/pages/login/login'
			});
		}

        // 检查响应状态码
        if (response.statusCode >= 200 && response.statusCode < 300) {
            return response;
        } else {
            throw new Error(`请求失败，状态码: ${response.statusCode}`);
        }
    } catch (error) {
        // 隐藏加载提示
        uni.hideLoading();

        if (error.errMsg.includes('401')) {

        }

        console.log('err' + error); // 用于调试
        return Promise.reject(error);
    }
};

/**
 * 处理响应错误
 * @param {Object} response - 响应对象
 */
const handleResponseError = (response) => {
    let errorMessage = '未知错误';
    switch (response.statusCode) {
        case 400:
            errorMessage = '客户端错误';
            break;
        case 401:
            errorMessage = '未授权';
            break;
        case 403:
            errorMessage = '禁止访问';
            break;
        case 404:
            errorMessage = '找不到资源';
            break;
        case 500:
            errorMessage = '服务器内部错误';
            break;
        default:
            errorMessage = '网络错误';
    }
    uni.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 2000
    });
};

// 导出请求函数
export default request;
